/*
 * @author Diego Bran
 * @author Miguel Zea
 * @author Eduardo Drummond
 * @author Javier García
 * @author Derek Orbaugh
 * 
 * | ======================================== |
 * |    Universidad Del Valle De Guatemala    |
 * | ======================================== |
 * | Algoritmos y Estructuras de Datos.       |
 * | Sección 20.                              | 
 * | Proyecto 1.                              |
 * | Descripción: servicio de venta de libros |
 * | usados, implementado mediante JavaFX 2.0 | 
 * | y MySQL para el soporte de persistencia. |
 * | ======================================== |
 */
package invapp;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * Clase responsable de la obtención y gestión de conexiones a una base de datos
 * mySQL.
 */
public class DBConnect {
    
    // Se definen los parametros requeridos para la conexión con la base de datos 
    private static Connection conn;
    private static String url = "jdbc:mysql://localhost:3306/test";
    private static String user = "root";
    private static String pass = "root";

    /**
     * Pre: 
     * Post: se establece la conexión con la base de datos mySQL. De ocurrir 
     * algun problema, retorna la excepcion correspondiente.
     */
    public static Connection connect() throws SQLException {
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
        } catch(ClassNotFoundException cnfe){
            System.err.println("Error: "+cnfe.getMessage());
        } catch(InstantiationException ie){
            System.err.println("Error: "+ie.getMessage());
        } catch(IllegalAccessException iae){
            System.err.println("Error: "+iae.getMessage());
        }

        // Se instancia el driver responsable del manejo de conexiones
        conn = DriverManager.getConnection(url,user,pass);
        return conn;
    }

    /**
     * Pre: ninguna.
     * Post: se retorna una conexion con la base de datos especificada por los
     * parametros si está disponible. Caso contrario, inteta realizar de nuevo
     * la conexion.
     */
    public static Connection getConnection() throws SQLException {
        if(conn != null && !conn.isClosed())
            return conn;
        connect();
        return conn;
    }
    
}